﻿///////////////////////////////////////////////////////////////////////////////
// File:        RealmdSocket.h
// Author:      671643387@qq.com
// Date:        2016年1月18日 上午11:18:22
// Description:
///////////////////////////////////////////////////////////////////////////////

#ifndef REALMD_REALMDSOCKET_H_
#define REALMD_REALMDSOCKET_H_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <string>
#include <yxs/crypto/Sha1.h>
#include <yxs/crypto/BigNumber.h>
#include <yxs/util/ByteBuffer.h>
#include <yxs/net/Socket.h>

#include "Common.h"

class RealmdSocket : public __YXS_SS_
{
public:
    RealmdSocket(void);
    virtual ~RealmdSocket(void);

public:
    bool _HandleLogonChallenge(void);
    bool _HandleLogonProof(void);
    bool _HandleReconnectChallenge(void);
    bool _HandleReconnectProof(void);
    bool _HandleRealmList(void);

protected:
    virtual void OnOpen(void);
    virtual void OnRecv(void);
    virtual void OnClose(void);

private:
    void _SetVSFields(const ::std::string& rI);
    void _SendProof(__YXS_SHA1_& sha);
    void _LoadRealmlist(__YXS_BYTEBUFFER_& pkt, ::std::uint32_t id);

private:
    ::std::string loginName_;
    ::std::string safeLoginName_;
    ::std::uint16_t build_;
    bool authed_;
    ::std::string localizationName_;
    eAccountTypes accountSecLv_;

    __YXS_BIGNUMBER_ N, s, g, v;
    __YXS_BIGNUMBER_ b, B;
    __YXS_BIGNUMBER_ K;
    __YXS_BIGNUMBER_ reconnectProof_;
};

#endif /* REALMD_REALMDSOCKET_H_ */
